<?php
header("Content-type:text/html;charset=utf-8");

$string = "Hello world! PHP是世界上最好的语言!";
$arr = array('PHP','Hello world!','世界上最好的语言');
$file = "log.txt";
$dir = "./log/";

//利用循环模拟测试
for($i=1;$i<=10000;$i++){
    createLog($arr, 'Array');
}
echo '<br>执行完成!';


/**
 * 日志文件超过一定大小时进行备份(避免日志文件过大而打不开)
 * 自定义函数 createLog($data, $describe, $file, $dir)
 * @$data        记录入日志的数据
 * @$describe    数据描述
 * @$file        日志文件名(带后缀名)    默认值 'log.txt'
 * @$dir         日志保存的路径          默认值 './'    (最好根据需要自定义好默认路径)
 */
function createLog($data, $describe='REQUEST', $file='log.txt', $dir='./log/'){
    //判断文件是否存在,若不存在就创建文件
    if(!file_exists($dir.$file)){
        file_put_contents($dir.$file, '');
    }

    //检测文件大小(单位:字节)
    $size = filesize($dir.$file);
    //清除缓存, 避免再次检测文件大小时得不到最新的信息
    clearstatcache();

    $logTime = '[ '.date('Y-m-d H:i:s').' ] ';    //记录日志的时间
    //$logData = $logTime.$describe.": ".print_r($data,1)."<br>\r\n";    //拼接日志数据
    $maxSize = 20971520;    //设置最大字节数    1M = 1024*1024 = 1048576(字节)    20M = 20971520(字节)    50M = 52428800(字节)

    if( $size<$maxSize ){
        //文件大小小于 $maxSize 值时将数据追加写入日志文件
        file_put_contents($dir.$file, $logTime.$describe.": ".print_r($data,1)."<br>\r\n", FILE_APPEND);
    }else{
        $dateStr = date('Ymd_His');
        $fileInfo = explode('.', $file);
        $fileName = $fileInfo[0];    //文件名
        $suffix = $fileInfo[1];        //文件后缀

        //文件大小大于 $maxSize 值时将原文件以重命名方式进行备份
        rename($dir.$file, $dir.$fileName.'_backup_'.$dateStr.'.'.$suffix);
        //将数据写入新文件
        file_put_contents($dir.$file, $logTime.$describe.": ".print_r($data,1)."<br>\r\n");


        /*------- test start -------*/
        //本段内容为测试时所用,实际运用中应删除
        //测试时使用循环, 时间间隔极短, 重命名的文件会重名, 用sleep()函数来延长时间, 使文件不重名
        sleep(1);
        /*------- test end -------*/
    }
}



?>